releng: update versions to 0.17.0#266
Conversation
Signed-off-by: Arnaud Fiorini <fiorini.arnaud@gmail.com>
Signed-off-by: Arnaud Fiorini <fiorini.arnaud@gmail.com>
📝 WalkthroughWalkthroughA comprehensive version bump across Eclipse Trace Compass Incubator from 0.14.0-SNAPSHOT (Maven parent) and 0.16.0.qualifier (features/bundles) to 0.17.0-SNAPSHOT and 0.17.0.qualifier respectively. Maven module version declarations removed to rely on parent inheritance. Python build scripts updated to use raw string literals for regex patterns. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~20 minutes Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@skeleton/scripts/update_parent_pom_versions.py`:
- Line 26: The regex is built by interpolating sys.argv[2] and sys.argv[3]
directly which allows meta-characters like "." to behave as regex tokens; change
the re.sub call to escape CLI inputs using re.escape(sys.argv[2]) and
re.escape(sys.argv[3]) when constructing the pattern and replacement so the
version strings are treated as literals (i.e., replace "<version>" + sys.argv[2]
+ r"-SNAPSHOT</version>(\n\s+</parent>)" with a pattern that uses
re.escape(sys.argv[2]) and build the replacement using the escaped sys.argv[3]
plus "-SNAPSHOT</version>\g<1>" to preserve the captured group).
In `@skeleton/scripts/update_root_pom_versions.py`:
- Around line 30-32: The regex patterns use raw sys.argv[2] (and sys.argv[3] in
the pattern) which contains dots and other regex metacharacters; escape those
values before inserting into the pattern (e.g., old_ver = re.escape(sys.argv[2])
and new_ver = re.escape(sys.argv[3]) or at least escape old_ver for the match)
and then build the re.sub patterns using old_ver in the pattern while using the
unescaped sys.argv[3] (or new_ver unescaped for the replacement text) in the
replacement string; update both re.sub calls that reference
sys.argv[2]/sys.argv[3] (the lines assigning fileContent via re.sub) to use
re.escape(...) when constructing the regex.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 2cbd653f-564f-4127-8ad9-181224d2cd23
📒 Files selected for processing (99)
analyses/org.eclipse.tracecompass.incubator.analysis/feature.xmlanalyses/org.eclipse.tracecompass.incubator.eventfieldcount/feature.xmlanalyses/org.eclipse.tracecompass.incubator.executioncomparison/feature.xmlanalyses/org.eclipse.tracecompass.incubator.filters/feature.xmlanalyses/org.eclipse.tracecompass.incubator.gpu/feature.xmlanalyses/org.eclipse.tracecompass.incubator.inandout/feature.xmlanalyses/org.eclipse.tracecompass.incubator.kernel/feature.xmlanalyses/org.eclipse.tracecompass.incubator.lttng2.ust.extras/feature.xmlanalyses/org.eclipse.tracecompass.incubator.rocm/feature.xmlanalyses/org.eclipse.tracecompass.incubator.tmf.ui.multiview/feature.xmlanalyses/pom.xmlcommon/org.eclipse.tracecompass.incubator.releng-site/pom.xmlcommon/org.eclipse.tracecompass.incubator.target/pom.xmlcommon/pom.xmldoc/org.eclipse.tracecompass.incubator.atrace.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.atrace.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.eventfieldcount.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.eventfieldcount.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.executioncomparison.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.executioncomparison.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.filters.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.filters.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.ftrace.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.ftrace.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.gerrit.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.gerrit.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.gpu.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.gpu.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.inandout.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.inandout.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.kernel.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.kernel.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.lttng2.ust.extras.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.lttng2.ust.extras.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.opentracing.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.opentracing.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.otf2.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.otf2.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.perf.profiling.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.perf.profiling.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.ros.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.ros.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.ros2.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.ros2.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.scripting.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.scripting.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.system.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.system.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.trace.server.doc.dev/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.trace.server.doc.dev/pom.xmldoc/org.eclipse.tracecompass.incubator.uftrace.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.uftrace.doc.user/pom.xmldoc/org.eclipse.tracecompass.incubator.virtual.machine.analysis.doc.user/META-INF/MANIFEST.MFdoc/org.eclipse.tracecompass.incubator.virtual.machine.analysis.doc.user/pom.xmldoc/pom.xmlpom.xmlrcp/org.eclipse.tracecompass.incubator.rcp.branding.feature/feature.xmlrcp/org.eclipse.tracecompass.incubator.rcp.branding.feature/pom.xmlrcp/org.eclipse.tracecompass.incubator.rcp.branding/META-INF/MANIFEST.MFrcp/org.eclipse.tracecompass.incubator.rcp.branding/plugin.xmlrcp/org.eclipse.tracecompass.incubator.rcp.branding/pom.xmlrcp/org.eclipse.tracecompass.incubator.rcp.product/legacy/tracing.incubator.productrcp/org.eclipse.tracecompass.incubator.rcp.product/pom.xmlrcp/org.eclipse.tracecompass.incubator.rcp.product/tracing.incubator.productrcp/org.eclipse.tracecompass.incubator.rcp/feature.xmlrcp/org.eclipse.tracecompass.incubator.rcp/pom.xmlrcp/pom.xmlscripting/org.eclipse.tracecompass.incubator.scripting.javascript/feature.xmlscripting/org.eclipse.tracecompass.incubator.scripting.python/feature.xmlscripting/org.eclipse.tracecompass.incubator.scripting.ui.tests/pom.xmlscripting/org.eclipse.tracecompass.incubator.scripting/feature.xmlscripting/pom.xmlskeleton/scripts/update_parent_pom_versions.pyskeleton/scripts/update_root_pom_versions.pytrace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/META-INF/MANIFEST.MFtrace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest/feature.xmltrace-server/org.eclipse.tracecompass.incubator.trace.server.product/legacy-e4.34/traceserver.producttrace-server/org.eclipse.tracecompass.incubator.trace.server.product/pom.xmltrace-server/org.eclipse.tracecompass.incubator.trace.server.product/traceserver.producttrace-server/org.eclipse.tracecompass.incubator.tsp.client.core/pom.xmltrace-server/pom.xmltracetypes/org.eclipse.tracecompass.incubator.atrace/feature.xmltracetypes/org.eclipse.tracecompass.incubator.dpdk/feature.xmltracetypes/org.eclipse.tracecompass.incubator.ftrace/feature.xmltracetypes/org.eclipse.tracecompass.incubator.gerrit/feature.xmltracetypes/org.eclipse.tracecompass.incubator.hudson.maven/feature.xmltracetypes/org.eclipse.tracecompass.incubator.jifa/feature.xmltracetypes/org.eclipse.tracecompass.incubator.opentracing/feature.xmltracetypes/org.eclipse.tracecompass.incubator.otf2/feature.xmltracetypes/org.eclipse.tracecompass.incubator.perf.profiling/feature.xmltracetypes/org.eclipse.tracecompass.incubator.ros/feature.xmltracetypes/org.eclipse.tracecompass.incubator.ros2/feature.xmltracetypes/org.eclipse.tracecompass.incubator.system/feature.xmltracetypes/org.eclipse.tracecompass.incubator.tracecompass/feature.xmltracetypes/org.eclipse.tracecompass.incubator.traceevent/feature.xmltracetypes/org.eclipse.tracecompass.incubator.uftrace/feature.xmltracetypes/pom.xmlvm/org.eclipse.tracecompass.incubator.virtual.machine.analysis/feature.xmlvm/pom.xml
| sys.exit('Usage: python update_parent_pom_versions.py [file] [old version] [new version]') | ||
| fileContent = open(sys.argv[1]).read() | ||
| fileContent = re.sub("<version>" + sys.argv[2] + "-SNAPSHOT</version>(\n\s+</parent>)", "<version>" + sys.argv[3] + "-SNAPSHOT</version>\g<1>", fileContent) | ||
| fileContent = re.sub("<version>" + sys.argv[2] + r"-SNAPSHOT</version>(\n\s+</parent>)", "<version>" + sys.argv[3] + r"-SNAPSHOT</version>\g<1>", fileContent) |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
python - <<'PY'
import re
old = "0.14.0"
pattern_unescaped = "<version>" + old + r"-SNAPSHOT</version>(\n\s+</parent>)"
pattern_escaped = rf"<version>{re.escape(old)}-SNAPSHOT</version>(\n\s+</parent>)"
text_good = "<version>0.14.0-SNAPSHOT</version>\n </parent>"
text_bad = "<version>0x14y0-SNAPSHOT</version>\n </parent>"
print("unescaped matches good:", bool(re.search(pattern_unescaped, text_good)))
print("unescaped matches bad :", bool(re.search(pattern_unescaped, text_bad)))
print("escaped matches bad :", bool(re.search(pattern_escaped, text_bad)))
PYRepository: eclipse-tracecompass-incubator/org.eclipse.tracecompass.incubator
Length of output: 196
🏁 Script executed:
fd -type f -name "update_parent_pom_versions.py"Repository: eclipse-tracecompass-incubator/org.eclipse.tracecompass.incubator
Length of output: 279
🏁 Script executed:
fd --type f -name "update_parent_pom_versions.py"Repository: eclipse-tracecompass-incubator/org.eclipse.tracecompass.incubator
Length of output: 339
🏁 Script executed:
find . -name "update_parent_pom_versions.py"Repository: eclipse-tracecompass-incubator/org.eclipse.tracecompass.incubator
Length of output: 157
🏁 Script executed:
cat -n ./skeleton/scripts/update_parent_pom_versions.py | head -40Repository: eclipse-tracecompass-incubator/org.eclipse.tracecompass.incubator
Length of output: 1433
🏁 Script executed:
wc -l ./skeleton/scripts/update_parent_pom_versions.pyRepository: eclipse-tracecompass-incubator/org.eclipse.tracecompass.incubator
Length of output: 160
Escape CLI version input before using it in a regex pattern.
Line 26 interpolates sys.argv[2] directly into the regex pattern. Since versions contain ., the pattern can match unintended values and perform incorrect replacements (e.g., a version "0.14.0" pattern would incorrectly match "0x14y0").
Proposed fix
-fileContent = re.sub("<version>" + sys.argv[2] + r"-SNAPSHOT</version>(\n\s+</parent>)", "<version>" + sys.argv[3] + r"-SNAPSHOT</version>\g<1>", fileContent)
+pattern = rf"<version>{re.escape(sys.argv[2])}-SNAPSHOT</version>(\n\s+</parent>)"
+replacement = rf"<version>{sys.argv[3]}-SNAPSHOT</version>\g<1>"
+fileContent = re.sub(pattern, replacement, fileContent)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| fileContent = re.sub("<version>" + sys.argv[2] + r"-SNAPSHOT</version>(\n\s+</parent>)", "<version>" + sys.argv[3] + r"-SNAPSHOT</version>\g<1>", fileContent) | |
| pattern = rf"<version>{re.escape(sys.argv[2])}-SNAPSHOT</version>(\n\s+</parent>)" | |
| replacement = rf"<version>{sys.argv[3]}-SNAPSHOT</version>\g<1>" | |
| fileContent = re.sub(pattern, replacement, fileContent) |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skeleton/scripts/update_parent_pom_versions.py` at line 26, The regex is
built by interpolating sys.argv[2] and sys.argv[3] directly which allows
meta-characters like "." to behave as regex tokens; change the re.sub call to
escape CLI inputs using re.escape(sys.argv[2]) and re.escape(sys.argv[3]) when
constructing the pattern and replacement so the version strings are treated as
literals (i.e., replace "<version>" + sys.argv[2] +
r"-SNAPSHOT</version>(\n\s+</parent>)" with a pattern that uses
re.escape(sys.argv[2]) and build the replacement using the escaped sys.argv[3]
plus "-SNAPSHOT</version>\g<1>" to preserve the captured group).
| fileContent = re.sub(r"(<artifactId>org.eclipse.tracecompass.*</artifactId>\n\s+)<version>" + sys.argv[2] + "-SNAPSHOT</version>", r"\g<1><version>" + sys.argv[3] + "-SNAPSHOT</version>", fileContent) | ||
| # Also the target platform version being used | ||
| fileContent = re.sub("<version>" + sys.argv[2] + "-SNAPSHOT</version>(\n\s+</artifact>)", "<version>" + sys.argv[3] + "-SNAPSHOT</version>\g<1>", fileContent) | ||
| fileContent = re.sub("<version>" + sys.argv[2] + r"-SNAPSHOT</version>(\n\s+</artifact>)", "<version>" + sys.argv[3] + r"-SNAPSHOT</version>\g<1>", fileContent) |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Confirm where sys.argv[2] is directly embedded in re.sub patterns
rg -n -C2 're\.sub\(|sys\.argv\[2\]|re\.escape' skeleton/scripts/update_root_pom_versions.pyRepository: eclipse-tracecompass-incubator/org.eclipse.tracecompass.incubator
Length of output: 708
Escape sys.argv[2] before injecting into regex patterns.
Lines 30 and 32 directly concatenate the old version into regex patterns without escaping. Version strings contain . which are unescaped regex metacharacters, causing over-matching. For example, version "0.16.0" would match "0X16X0" where X is any character, leading to unintended replacements.
🔧 Proposed fix
fileContent = open(sys.argv[1]).read()
-fileContent = re.sub(r"(<artifactId>org.eclipse.tracecompass.*</artifactId>\n\s+)<version>" + sys.argv[2] + "-SNAPSHOT</version>", r"\g<1><version>" + sys.argv[3] + "-SNAPSHOT</version>", fileContent)
+old_version = re.escape(sys.argv[2])
+new_version = sys.argv[3]
+fileContent = re.sub(
+ rf"(<artifactId>org\.eclipse\.tracecompass.*</artifactId>\n\s+)<version>{old_version}-SNAPSHOT</version>",
+ rf"\g<1><version>{new_version}-SNAPSHOT</version>",
+ fileContent,
+)
# Also the target platform version being used
-fileContent = re.sub("<version>" + sys.argv[2] + r"-SNAPSHOT</version>(\n\s+</artifact>)", "<version>" + sys.argv[3] + r"-SNAPSHOT</version>\g<1>", fileContent)
+fileContent = re.sub(
+ rf"<version>{old_version}-SNAPSHOT</version>(\n\s+</artifact>)",
+ rf"<version>{new_version}-SNAPSHOT</version>\g<1>",
+ fileContent,
+)
open(sys.argv[1], "w").write(fileContent)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| fileContent = re.sub(r"(<artifactId>org.eclipse.tracecompass.*</artifactId>\n\s+)<version>" + sys.argv[2] + "-SNAPSHOT</version>", r"\g<1><version>" + sys.argv[3] + "-SNAPSHOT</version>", fileContent) | |
| # Also the target platform version being used | |
| fileContent = re.sub("<version>" + sys.argv[2] + "-SNAPSHOT</version>(\n\s+</artifact>)", "<version>" + sys.argv[3] + "-SNAPSHOT</version>\g<1>", fileContent) | |
| fileContent = re.sub("<version>" + sys.argv[2] + r"-SNAPSHOT</version>(\n\s+</artifact>)", "<version>" + sys.argv[3] + r"-SNAPSHOT</version>\g<1>", fileContent) | |
| old_version = re.escape(sys.argv[2]) | |
| new_version = sys.argv[3] | |
| fileContent = re.sub( | |
| rf"(<artifactId>org\.eclipse\.tracecompass.*</artifactId>\n\s+)<version>{old_version}-SNAPSHOT</version>", | |
| rf"\g<1><version>{new_version}-SNAPSHOT</version>", | |
| fileContent, | |
| ) | |
| # Also the target platform version being used | |
| fileContent = re.sub( | |
| rf"<version>{old_version}-SNAPSHOT</version>(\n\s+</artifact>)", | |
| rf"<version>{new_version}-SNAPSHOT</version>\g<1>", | |
| fileContent, | |
| ) |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skeleton/scripts/update_root_pom_versions.py` around lines 30 - 32, The regex
patterns use raw sys.argv[2] (and sys.argv[3] in the pattern) which contains
dots and other regex metacharacters; escape those values before inserting into
the pattern (e.g., old_ver = re.escape(sys.argv[2]) and new_ver =
re.escape(sys.argv[3]) or at least escape old_ver for the match) and then build
the re.sub patterns using old_ver in the pattern while using the unescaped
sys.argv[3] (or new_ver unescaped for the replacement text) in the replacement
string; update both re.sub calls that reference sys.argv[2]/sys.argv[3] (the
lines assigning fileContent via re.sub) to use re.escape(...) when constructing
the regex.
MatthewKhouzam
left a comment
There was a problem hiding this comment.
good drive by too!
What it does
releng: update versions to 0.17.0
How to test
Build and check versions
Follow-ups
N/A
Review checklist
Summary by CodeRabbit